package io.github.jsp.util;

/**
 * 操作系统类型检测工具类
 * 提供静态方法用于识别当前运行的操作系统类型
 */
public class OSUtils {
    
    /**
     * 操作系统类型枚举
     */
    public enum OSType {
        WINDOWS, 
        MAC, 
        LINUX, 
        UNIX, 
        SOLARIS, 
        ANDROID,
        OTHER
    }
    
    // 缓存当前操作系统名称（小写）
    private static final String OS_NAME_LOWER = System.getProperty("os.name").toLowerCase();
    
    // 缓存检测结果
    private static OSType detectedOS;
    
    /**
     * 获取当前操作系统类型
     * @return 操作系统类型枚举值
     */
    public static OSType getOSType() {
        if (detectedOS == null) {
            if (isWindows()) {
                detectedOS = OSType.WINDOWS;
            } else if (isMac()) {
                detectedOS = OSType.MAC;
            } else if (isLinux()) {
                // Android也是基于Linux的，但有特殊性，可以进一步区分
                if (System.getProperty("java.vm.vendor", "").contains("Android")) {
                    detectedOS = OSType.ANDROID;
                } else {
                    detectedOS = OSType.LINUX;
                }
            } else if (isSolaris()) {
                detectedOS = OSType.SOLARIS;
            } else if (isUnix()) {
                detectedOS = OSType.UNIX;
            } else {
                detectedOS = OSType.OTHER;
            }
        }
        return detectedOS;
    }

    /**
     * 判断当前系统是否为Windows
     * @return 如果是Windows系统返回true，否则返回false
     */
    public static boolean isWindows() {
        return OS_NAME_LOWER.contains("win");
    }

    /**
     * 判断当前系统是否为Mac OS
     * @return 如果是Mac系统返回true，否则返回false
     */
    public static boolean isMac() {
        return OS_NAME_LOWER.contains("mac");
    }

    /**
     * 判断当前系统是否为Linux
     * @return 如果是Linux系统返回true，否则返回false
     */
    public static boolean isLinux() {
        return OS_NAME_LOWER.contains("linux") || OS_NAME_LOWER.contains("mpe/ix") 
                || OS_NAME_LOWER.contains("freebsd") || OS_NAME_LOWER.contains("irix")
                || OS_NAME_LOWER.contains("digital unix") || OS_NAME_LOWER.contains("gnu");
    }

    /**
     * 判断当前系统是否为Unix
     * @return 如果是Unix系统返回true，否则返回false
     */
    public static boolean isUnix() {
        return OS_NAME_LOWER.contains("nix") || OS_NAME_LOWER.contains("aix")
                || OS_NAME_LOWER.contains("hp-ux");
    }
    
    /**
     * 判断当前系统是否为Solaris
     * @return 如果是Solaris系统返回true，否则返回false
     */
    public static boolean isSolaris() {
        return OS_NAME_LOWER.contains("sunos") || OS_NAME_LOWER.contains("solaris");
    }
    
    /**
     * 获取操作系统名称
     * @return 操作系统名称
     */
    public static String getOSName() {
        return System.getProperty("os.name");
    }
    
    /**
     * 获取操作系统版本
     * @return 操作系统版本
     */
    public static String getOSVersion() {
        return System.getProperty("os.version");
    }
    
    /**
     * 获取操作系统架构
     * @return 操作系统架构
     */
    public static String getOSArch() {
        return System.getProperty("os.arch");
    }


    public static void main(String[] args) {
        // 获取操作系统类型
        OSUtils.OSType osType = OSUtils.getOSType();

        // 判断特定操作系统
        if (OSUtils.isWindows()) {
            System.out.println("当前是Windows系统");
        } else if (OSUtils.isMac()) {
            System.out.println("当前是Mac系统");
        }

    // 获取系统详细信息
        System.out.println("操作系统名称: " + OSUtils.getOSName());
        System.out.println("操作系统版本: " + OSUtils.getOSVersion());
        System.out.println("操作系统架构: " + OSUtils.getOSArch());
    }
}